 //进行axios二次封装:使用请求与相应拦截器
import axios from "axios"
import { ElMessage } from "element-plus"
//引入用户相关的仓库
import useUserStore from "@/store/modules/user"
//引入token操作方法
import { SET_TOKEN, GET_TOKEN, REMOVE_TOKEN } from "@/utils/token"
//第一步:利用axios对象的create方法，去创建axios实例(其他配置:基础路径、超时的时间)
let request = axios.create({
    //基础路径
    baseURL:import.meta.env.VITE_APP_BASE_API,
    timeout : 5000
})
//第二步：request实例添加请求与响应拦截器
request.interceptors.request.use((config)=>{
         //获取用户相关的小仓库:获取仓库内部token，登录成功后携带给服务器
         // 优先从localStorage获取最新token
         const token = GET_TOKEN()
         if(token){
             config.headers.Authorization = token
         }
     //config配置对象，headers属性请求头，经常给服务端携带公共参数
     //返回配置对象
     return config
})

//第三步：响应拦截器
request.interceptors.response.use((Response)=>{
    //成功回调
    //简化数据
    return Response.data
},(error)=>{
    //失败回调：处理http网络错误
    //定义一个变量：存储网络错误信息
    let message = '网络连接失败'
    let status = error.response?.status
    let userStore = useUserStore()
    if (status) {
        switch(status){
            case 401:
                message="token过期"
                break
            case 403:
                message="无权访问"
                break
            case 404:
                message="请求地址错误"
                break
            case 500:
                message="服务器出现问题"
                break
        }
    }
    
    //提示错误信息
    ElMessage({
        type: 'error',
        message: message
    })
    return Promise.reject(error)
})

//对外暴露
export default request
